package com.example.cola.domain.repository;

import com.example.cola.domain.model.Email;
import com.example.cola.domain.model.PhoneNumber;
import com.example.cola.domain.model.User;
import com.example.cola.domain.model.UserId;

import java.util.List;
import java.util.Optional;

/**
 * 用户仓储接口
 * 
 * @author 资深开发专家
 * @version 1.0
 */
public interface UserRepository {
    
    /**
     * 保存用户
     */
    void save(User user);
    
    /**
     * 根据ID查找用户
     */
    Optional<User> findById(UserId userId);
    
    /**
     * 根据邮箱查找用户
     */
    Optional<User> findByEmail(Email email);
    
    /**
     * 根据手机号查找用户
     */
    Optional<User> findByPhoneNumber(PhoneNumber phoneNumber);
    
    /**
     * 检查邮箱是否存在
     */
    boolean existsByEmail(Email email);
    
    /**
     * 检查手机号是否存在
     */
    boolean existsByPhoneNumber(PhoneNumber phoneNumber);
    
    /**
     * 分页查询用户
     */
    List<User> findUsers(int page, int size, String keyword);
    
    /**
     * 统计用户总数
     */
    long countUsers(String keyword);
    
    /**
     * 删除用户
     */
    void delete(UserId userId);
}
